package com.wva.user.strategy;

import com.wva.user.enums.LoginType;

import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;

public abstract class AbstractLoginStrategy implements LoginStrategy {
    public static final Map<LoginType, AbstractLoginStrategy> loginStrategies = new HashMap<>();

    /**
     * 具体登录策略创建后将自己添加到Map中
     */
    @PostConstruct
    void init() {
        AbstractLoginStrategy.loginStrategies.put(getLoginType(), this);
    }

    /**
     * 具体策略告知自己的登录类型
     */
    protected abstract LoginType getLoginType();

    /**
     * 具体策略告知自己的校验分组规则
     * 当需要返回一个未知的类/接口时，使用Class<?>类型！
     * @return
     */
    public abstract Class<?> getGroup();
}
